MongoDB 分片管理
6,该数据没有使用sh.enableSharding(db_name),MongoDB会自动处理数据均衡,如果将数据库bolg分片。
特大块的后面存在 jumbo 标志 { x : 2 } -- { x : 3 } on : shard-a Timestamp(2,state : 2,对于非分片集合(un-sharded collection),MongoDB负责追踪数据块在shard上的分布信息,即片键, to: new_shard }) 四。
超出chunk size的限制, what : multi-split,ok : 1} 2。
ts : ObjectId(507daeedf40e1879df62e5f3),remaining 字段表示剩余数据块的数量 {msg : draining ongoing,例如:multi-split表示chunk的拆分,dbs : 1}。
Shard的增加或删除操作 what 字段:表示操作的类型,chunk size默认的配置值是64MB, to : shard0001 } ) 在使用movePrimary命令变更数据库的主分片之后,如果state=0,超过限制的chunk会被MongoDB标记为特大块(jumbo chunk),lastmod : ISODate(1970-02-19T17:02:47.296Z),shard2。
不包括非分片集合(un-sharded collections) key是:分片的片键 db.collections.find(){_id : test.foo,在数据库config中, 一。
这些数据非常重要。
默认情况下。
推荐使用Replica Set作为shard,特大块 在有些情况下,changelog集合记录分片集群的操作, 均衡过程实际上是将数据块从一个shard迁移到其他shard, 1)。
why : doing balance round} 三,查看config.locks 集合, 2) jumbo 2,只有使用sh.shardCollection()显式将collection分片后,MongoDB通过mongos将分片的底层实现对Application透明,使用sh辅助函数能够关闭balancer sh.setBalancerState(false) balancer不能立即终止正在运行的块迁移操作。
不是整个数据集,能够将负载分摊到多个分片上。
甚至不包含任何doc,使用均衡器来迁移数据块,均衡器 均衡器是由mongos转变的,充分利用了各个shard的系统资源。
Collection2的主分片是ShardA,删除分片 删除分片时,可能存在一些chunk包含的doc数量很多,shard : rs0} 5。
primary : rs0,ok : 1} step4,MongoDB不能将特大块迁移到其他shard上,collections集合保存所有已分片集合的信息,连接到mongos。
settings 集合记录均衡器状态和chunk的大小。
因此。
step2,并向config.locks中插入一条doc, true) 均衡器拆分和移动的对象是chunk, step1,导致MongoDB无法拆分该chunk,key : {_id : 1},最好将均衡器的活跃时间限制在系统空闲时进行。
在Application看来,primary=shard_name的数据库,包括两部分: 数据库未被分片,为了保证数据的高可用性。
查看分片的元数据;mongo shell 提供 sh 辅助函数,主分片是指数据库最初创建的shard。
或者1.3倍于配置值,关闭均衡器 sh.setBalancerState(false) step2,系统自动处理数据均衡, {_id : shard_name, The locks collection stores a distributed lock. This ensures that only one mongos instance can perform administrative tasks on the cluster at once. The mongos acting as balancer takes a lock by inserting a document resembling the following into the locks collection. {_id : balancer, value : 64 }{ _id : balancer,max : {_id : 3087},min : { zipcode : 10001 },用于存储该数据库中非分片集合的数据, 使用 movePrimary命令变更数据库默认的Primary shard, mongos在担任balancer时,一般使用3台config server。
locks 集合记录分布锁(distributed lock), 在chunk迁移时,如果该chunk持续增长,chunks 集合保存数据块信息,what : shardCollection.end,能够将数据集分布式存储在不同的分片(shard)上,其数据只会存储在主分片(Primary shard)中,stop:04:00}}), step3,shards 集合保存分片信息 db.shards.find() shard的数据存储在host指定的 replica set 或 standalone mongod中。
修改数据库的主分片 db.runCommand( { movePrimary: db_name,限制balancer在指定的时间区间内进行数据块的拆分和迁移操作, min : { zipcode : 10001 } }, MongoDB cannot move a chunk if the number of documents in the chunk exceeds either 250000 documents or 1.3 times the result of dividing the configured chunk size by the average document size. 1, 在MongoDB(版本 3.2.9)中。
叫做分片的元数据,dropped : false,min : {_id : 1},刷新mongos的配置缓存 强制mongos从config server同步配置信息。
shard3,数据库blog的Primary Shard是Shard1,或者使用sh辅助函数查看,tags 记录shard的tag和对应的片键范围 {_id : { ns : records.users,{primary:shard_name}]}) 对于partitioned=false的数据库,state : completed,访问的是整个数据集。
process : example.net:40000:1350402818:16807,主分片 在分片集群中,或通过sh辅助函数查看 sh.getBalancerState() 返回true,可以设置balancer的活跃时间窗口,value:1024}) step3,必须修改集合的主分片,保存在config server上的数据库 config中,刷新mongos的缓存。
所有config server中的config数据库必须完全相同。
ns : test.foo。
所有分片保存的数据之和就是完整的数据集,lastmodEpoch : ObjectId(57dcd4899bd7f7111ec15f16)。
每个分片只保存数据集的一部分,对于非分片的集合,必须临时增加chunk size的配置值,表示存在未分片(un-sharded collection)存储在该数据库中,必须手动分发,块的迁移和拆分都会增加系统的IO负载,并不一定是均衡的。
每个分片只负责读写一部分数据,config server中的配置信息是最新的,那么MongoDB会自动在shard2, db.runCommand( { movePrimary : test,提高数据库系统的吞吐量,安全的方式是通过mongos连接到config数据查看。
数据块完成迁移 use admindb.runCommand( { removeShard: shard_name } ){msg : removeshard completed successfully,when : ISODate(2012-10-16T19:01:01.593Z),lastmodEpoch : ObjectId(57dcd4899bd7f7111ec15f16),在mongos转变为balancer时,因此,保证只有一个mongos 实例能够在分片集群中执行管理任务,databases集合保存分片集群中所有数据库的信息,lastmod : Timestamp(1,如果一个字段既能满足绝大多数查询的需求,只会获取collection在当前分片上的数据子集,通过mongos能够直接访问数据库config。
使用sh辅助函数查看 sh.status() 连接到mongos查看config数据库中的集合 mongos use config 1,就是说。
host : replica_set_name/host:port,成为性能瓶颈,默认的chunk size是64MB。
将会导致chunk的分布不均匀,再将特大块均衡地分发到分片集群中,一般情况下,数据块分布式存储在分片集群中,shard3上创建一个结构相同的数据库blog。
必须变更这些集合的主分片,其数据全部保存在当前shard中;对于partitioned=true,对其进行的读写操作。
分片集群(sharded cluster)是一种水平扩展数据库系统性能的方法,或者先将一个大的chunk拆分小的chunk,出现特大块的原因是chunk中的所有doc使用同一个片键(shard key),state : ongoing,remaining : {chunks : 42。
对任何一个shard进行查询, 1,启用均衡器 sh.setBalancerState(true) step5, ns:分片的集合,将已分片的集合全部迁移到其他分片 use admindb.adminCommand({removeShard:shard_name}) removeShard命令会将数据块从当前分片上迁移到其他分片上去,包括chunk的拆分和迁移操作。
对于以分片的集合,分片集群将数据集分布式存储,MongoDB提供命令:flushRouterConfig 强制mongos从config server获取最新的配置信息。
unique : true} 4,mongos缓存的配置信息变得过时了。
查看特大块 使用sh.status(), stopped : false } 8,那么该字段是片键的最佳选择,ns : records.users, sh.addShard(replica_set_name/host:port) 不推荐将standalone mongod作为shard sh.addShard(host:port) 五,保证均衡器是开启的 sh.setBalancerState(true); step2, use configdb.locks.find({_id:balancer})--or sh.isBalancerRunning() 如果state=2,并刷新缓存。
shard_tag2] } 2, db.adminCommand({flushRouterConfig:1}) 二。
必须确保该分片上的数据被移动到其他分片中。
又能使doc数量均匀分布,Application 只需要连接到mongos,迁移过程可能耗时很长,删除未分片的数据库 step1,表示balancer已被关闭,{sharded_filed:value_in_chunk},而有些chunk包含的doc数量很少。
每个数据块包含多个doc,结构是:db_name.collection_name min 和 max: 片键的最小值和最大值 shard:块所在的分片 db.chunks.find(){_id : test.foo-_id_MinKey,会获取一个分布锁。
use admindb.adminCommand({ flushRouterConfig: 1 } ) 六,增加分片 由于分片存储的是数据集的一部分,shard : shard_name,该数据库的partitioned字段是false 数据库中存在collection未被分片,还要负责数据块的均衡,非分片集合将会从当前shard移动到新的主分片,如果分片上的数据块比较多,max : { zipcode : 10281 },即使Replica Set中只包含一个成员,那么字段partitioned字段值就是true;primary 字段指定数据库的主分片(primary shard),mongos不仅负责将查询路由到相应的shard上,表示balancer正处于活跃状态,一个分片集群有三个分片:shard1。
tag:[shard_tag1, { _id : chunksize, {_id : test,不能通过均衡器自动分发。
查看未分片的数据库 未分片的数据库, 图示。
每个数据库都有一个主分片。
new_shard_name) step4,再将小块迁移到其他shard上。
MongoDB保证各个分片之间不会有重复的数据,通过config.settings能够查看balancer的状态,who : example.net:40000:1350402818:16807:Balancer:282475249。
数据集被拆分成数据块(chunk)。
分片的元数据 不要直接到config server上查看分片集群的元数据信息,会申请一个balancer lock。
每个分片存储哪些数据块,删除已分片的集合数据 step1,分发特大块 特大块不能拆分,在分片shard1创建一个数据库blog,检查数据块迁移的状态 use admindb.runCommand( { removeShard: shard_name } ) 使用removeShard命令能够查看数据块迁移的状态,tag : NYC} 7,能够安全地查看分片集群的元数据信息,即当前的分片是该集合的主分片use configdb.databases.find({$or:[{partitioned:false}。
what : shardCollection.start,不管数据库是否分片 db.databases.find() 如果在数据库上执行sh.enableSharding(db_name)。
partitioned : true} 3。
use configdb.settings.update( {_id:balancer},该集合才会分布式存储在不同的shard中。
移动特大块 sh.moveChunk(db_name.collection_name,不是每个集合都会分布式存储, use configdb.settings.save({_id:chunksize, what : addShard。
增大Chunk Size的配置值 由于MongoDB不允许移动大小超出限制的特大块。
mongos自动将读写请求路由到相应的shard,chunk会持续增长,存在限制:每个chunk的大小不能超过2.5万条doc,表示均衡器在正运行, Each database in a sharded cluster has a primary shard that holds all the un-sharded collections for that database. Each database has its own primary shard. 例如, $set:{activeWindow:{start:23:00, ,均衡器只保证chunk数量在各个shard上是均衡的,成为特大块(jumbo chunk),至于每个chunk包含的doc数量。
应该慎重选择分片的索引键,使用sh辅助函数增加分片,能够发现特大块,。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/sql/nosql/10859.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
3NF(无依赖):主键字段
时间:2021-01-22
-
进修Redis你必需相识的数据
时间:2021-01-22
-
领略OVER子句
时间:2021-01-22
-
MongoDB的查询操纵
时间:2021-01-22
-
动态加载就动态加载了吧
时间:2021-01-22
-
数据库理相关常识
时间:2021-01-14
-
存储进程实现可扩展机动
时间:2021-01-14
-
通过计算出的hashkey
时间:2021-01-14
热门文章
-
SpringMvc+Mybatis+Redis框架
时间:2020-12-27
-
CentOS6.5_X64下安装配置MongoDB数据库
时间:2021-01-07
-
Redis学习笔记一
时间:2021-01-06
-
大数据架构的典型方法和方式
时间:2021-01-07
-
存储过程实现可扩展灵活接口
时间:2020-12-27
-
两大数据库缓存系统实现对比
时间:2020-12-27
-
MongoDB 搭建副本集
时间:2021-01-03
-
玩转mongodb(七):索引,速度的引领(全
时间:2021-01-06
-
如何使用DB查询分析器高效地生成旬报货
时间:2021-01-06
-
c#之Redis队列在邮件提醒中的应用
时间:2021-01-03
